package com.example.jetpack

import androidx.paging.DataSource
import androidx.paging.PositionalDataSource

/**
 * 准备数据源
 */
class StudentDataSource : PositionalDataSource<Student>() {

    /**
     *
     * 加载第一页函数时，会执行此方法进行加载初始化
     */
    override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<Student>) {

        callback.onResult(getStudents(0,Flag.SIZE),0,1000)
    }

    /**
     * 当有了数据，滑动的时候需要加载数据时，调用此方法
     */
    override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback<Student>) {
        //从哪里开始加载： Paging内部进行实现的   加载数量同时时内部进行计算的
        callback.onResult(getStudents(params.startPosition,params.loadSize))

    }

    /**
     * 数据的来源： 数据库、文件、网络服务器...
     */
    private fun getStudents(startPosition: Int , pageSize:Int): List<Student>{
        val result = mutableListOf<Student>()
        for (i in startPosition until (startPosition + pageSize) ){
            result.add(Student(i,"姓名： $i"))
        }
        return result
    }
}

/**
 * 构建数据源工厂
 */
class StudentDataSourceFactory: DataSource.Factory<Int,Student>(){
    override fun create(): DataSource<Int, Student> {
        return StudentDataSource()
    }
}